/**
 * PLM项目日志助手
 * 提供日志记录功能
 */

// 尝试导入全局日志助手
let globalLogHelper = null;
try {
  globalLogHelper = require('../../../helpers/log_helper.js');
} catch (e) {
  console.warn('无法导入全局日志助手，使用本地实现');
}

// 检查云函数环境是否可用
let cloudFunctionAvailable = false;
try {
  // 检查云函数环境
  cloudFunctionAvailable = wx.cloud && typeof wx.cloud.callFunction === 'function';
  // 尝试初始化云环境（如果尚未初始化）
  if (cloudFunctionAvailable && !wx.cloud.inited) {
    wx.cloud.init({
      traceUser: true,
      env: 'development' // 可以根据实际情况修改环境ID
    });
  }
} catch (e) {
  console.warn('云函数环境不可用:', e);
  cloudFunctionAvailable = false;
}

/**
 * 记录事件日志
 * @param {String} event 事件名称
 * @param {Object} data 事件数据
 */
function logEvent(event, data = {}) {
  // 如果全局助手可用，则使用它
  if (globalLogHelper && globalLogHelper.logEvent) {
    return globalLogHelper.logEvent(event, data);
  }
  
  // 否则使用本地实现
  console.log(`[事件日志] ${event}`, data);
  
  // 仅当云函数环境可用时尝试发送
  if (cloudFunctionAvailable) {
    try {
      wx.cloud.callFunction({
        name: 'log',
        data: {
          action: 'add',
          type: 'event',
          event: event,
          data: data
        }
      }).catch(err => {
        // 仅在开发环境输出云函数错误
        if (process.env.NODE_ENV === 'development') {
          console.warn('云函数调用失败，但不影响使用:', err);
        }
      });
    } catch (e) {
      // 忽略服务端错误
    }
  }
}

/**
 * 记录错误日志
 * @param {Error|String} error 错误对象或错误消息
 * @param {String} context 错误上下文
 */
function logError(error, context = '') {
  // 如果全局助手可用，则使用它
  if (globalLogHelper && globalLogHelper.logError) {
    return globalLogHelper.logError(error, context);
  }
  
  // 否则使用本地实现
  console.error(`[错误日志] ${context}:`, error);
  
  // 仅当云函数环境可用时尝试发送
  if (cloudFunctionAvailable) {
    try {
      const errorMsg = error instanceof Error ? error.message : String(error);
      const stack = error instanceof Error ? error.stack : '';
      
      wx.cloud.callFunction({
        name: 'log',
        data: {
          action: 'add',
          type: 'error',
          error: errorMsg,
          stack: stack,
          context: context
        }
      }).catch(err => {
        // 仅在开发环境输出云函数错误
        if (process.env.NODE_ENV === 'development') {
          console.warn('云函数调用失败，但不影响使用:', err);
        }
      });
    } catch (e) {
      // 忽略服务端错误
    }
  }
}

/**
 * 记录页面浏览
 * @param {String} page 页面路径
 * @param {Object} params 页面参数
 */
function logPageView(page, params = {}) {
  // 如果全局助手可用，则使用它
  if (globalLogHelper && globalLogHelper.logPageView) {
    return globalLogHelper.logPageView(page, params);
  }
  
  // 否则使用本地实现
  console.log(`[页面浏览] ${page}`, params);
  
  // 仅当云函数环境可用时尝试发送
  if (cloudFunctionAvailable) {
    try {
      wx.cloud.callFunction({
        name: 'log',
        data: {
          action: 'add',
          type: 'pageview',
          page: page,
          params: params
        }
      }).catch(err => {
        // 仅在开发环境输出云函数错误
        if (process.env.NODE_ENV === 'development') {
          console.warn('云函数调用失败，但不影响使用:', err);
        }
      });
    } catch (e) {
      // 忽略服务端错误
    }
  }
}

// 导出模块
module.exports = {
  logEvent,
  logError,
  logPageView
}; 